<?php
include_once '../gerenciadores/AutoloadGerenciadores.php';

class RepositorioDePessoas{
	private static $instancia;
	
	private function __construct(){
	}
	
		
	public static function getInstancia(){
		if(!isset(self::$instancia)){
			$class = __CLASS__;
			self::$instancia = $class;
		}
		return self::$instancia;
	}
	
	public static function getPessoa($cpf){
		if(!is_null($cpf)){
			$sql = "SELECT * FROM tpessoa WHERE cpf = '".$cpf."';";
			
			__autoload("Conexao");
			$tabela = Conexao::tabelaSql($sql);
			
			foreach ($tabela as $linha){
				__autoload("Pessoa");
				$pessoa = new Pessoa($linha['cpf'], $linha['nome'], $linha['cargo'], $linha['instituicao']);
					
				$pessoa->setIdPessoa($linha['idpessoa']);
				$pessoa->setConfirma($linha['confirma']);
				$pessoa->setSenha($linha['senha']);
					
			}
			
			return $pessoa;
		}
	}
	
	public static function exibePessoa($idPessoa){
		if(!is_null($idPessoa)){
			$sql = "SELECT * FROM tpessoa WHERE idpessoa = '".$idPessoa."';";
				
			__autoload("Conexao");
			$tabela = Conexao::tabelaSql($sql);
				
			foreach ($tabela as $linha){
				__autoload("Pessoa");
				$pessoa = new Pessoa($linha['cpf'], $linha['nome'], $linha['cargo'], $linha['instituicao']);	
				$pessoa->setIdPessoa($linha['idpessoa']);
				$pessoa->setConfirma($linha['confirma']);
				$pessoa->setSenha($linha['senha']);
					
			}
			return $pessoa;
		}
	}
	
	
	public static function buscaPessoa($campo, $criterio){
		$sql = "SELECT p.cpf, p.nome, p.cargo, p.instituicao, p.idpessoa, p.cpf FROM tpessoa p LEFT JOIN t_matricula m ON (p.idpessoa = m.idpessoa)
		WHERE ".$campo." LIKE '%".$criterio."%';";
		__autoload("Conexao");
		$tabela = Conexao::tabelaSql($sql);
		
		$i=0;
		foreach ($tabela as $linha){
			$pessoa[$i] = new Pessoa($linha['cpf'], $linha['nome'],$linha['cargo'], $linha['instituicao']);
			$pessoa[$i]->setIdPessoa($linha['idpessoa']);
			$i++;
		}
		
		return $pessoa;
	}

	
	public static function adicionaPessoa(Pessoa $pessoa){
		if(isset($pessoa) && !self::equalsPessoa($pessoa)){
			__autoload("Cripto");
			$senha = criaSenha($pessoa->getSenha());
			
			$sql = "INSERT INTO `tpessoa`
				(`cargo`, `instituicao`, `nome`, `cpf`, `senha`, `confirma`)
			 	VALUES ('".
						 	$pessoa->getCargo()."','".
						 	$pessoa->getInstituicao()."','".
						 	$pessoa->getNome()."','".
						 	$pessoa->getCpf()."','".
						 	$senha."','".
						 	$pessoa->getConfirma()."');";
			
			__autoload("Conexao");
			
			Conexao::executaSql($sql);
		}else{
			$idPessoa = self::idPessoa($pessoa->getCpf());
			$pessoa->setIdPessoa($idPessoa);
			
			self::atualizaPessoa($pessoa);
		}
	}
	
	public static function atualizaPessoa(Pessoa $pessoa){
		print_r($pessoa);
		$contador = 0;
		__autoload("Cripto");
		$senha = criaSenha($pessoa->getSenha());

			$sql = "UPDATE `tpessoa` SET ";
			if(!is_null($pessoa->getCargo())){
				$sql .= "`cargo`='".$pessoa->getCargo();
				$contador++;
			}
			if(!is_null($pessoa->getInstituicao())){
				if($contador>0){
					$sql .= "', ";
				}
				$sql .="`instituicao` = '".$pessoa->getInstituicao();
				$contador++;
			}
			if(!is_null($pessoa->getNome())){
				if($contador>0){
					$sql .= "', ";
				}
				$sql .= "`nome` = '".$pessoa->getNome();
				$contador++;
			}
			if(!is_null($pessoa->getCpf())){
				if($contador>0){
					$sql .= "', ";
				}
				$sql .= "`cpf` = '".$pessoa->getCpf();
				$contador++;
			}
			if(!is_null($pessoa->getSenha())){
				if($contador>0){
					$sql .= "', ";
				}
				$sql .= "`senha` = '".$senha;
				$contador++;
			}
			if(!is_null($pessoa->getConfirma())){
				if($contador>0){
					$sql = $sql."', ";
				}
				$sql = $sql."`confirma` = '".$pessoa->getConfirma();
				$contador++;
			}
			
			$sql = $sql."' WHERE `idpessoa` LIKE '".$pessoa->getIdPessoa()."';";
			
			__autoload("ExcecaoPessoa");
		try{
			__autoload("Conexao");
			Conexao::executaSql($sql);
		}
		catch (PessoaAtualizaException $atualException){
			echo $atualException->getMessage();
		}
			
	}
	
	public static function getCadastro(Pessoa $pessoa){
		$tabCadastro = array();
			
		__autoload("Cadastro");
		
		$sql = "SELECT pes.idpessoa, pes.cpf, pes.nome, pes.cargo, pes.instituicao, 
				pes.senha, pes.confirma, cad.tipo_vinculo, turma.idturma, turma.ano, turma.turma, turma.status,
				turma.datainicio, turma.datafim,  curso.siglacurso, curso.nomecurso, curso.idcurso
				FROM `tcadastro` cad
				INNER JOIN tpessoa pes ON (pes.idpessoa = cad.idpessoa)
				INNER JOIN tturma turma ON (turma.idturma = cad.idturma)
				INNER JOIN tcursos curso ON (curso.idcurso = cad.idcurso)
				 WHERE pes.idpessoa LIKE '".$pessoa->getIdPessoa()."' AND turma.datafim='0000-00-00';";
		
		$tabela = Conexao::tabelaSql($sql);
		
		$i=0;
		foreach($tabela as $linha){
			$cadastro[$i] = new Cadastro();
			
			$cadastro[$i]->setPessoa($pessoa);
			$tipoVinculo = $linha["tipo_vinculo"];
			$cadastro[$i]->setTipoVinculo($tipoVinculo);
			
			__autoload("RepositorioCurso");
			__autoload("Curso");
			$curso = new Curso();
			$curso->setIdCurso($linha["idcurso"]);
			$curso->setSiglaCurso($linha['siglacurso']);
			$curso->setNomeCurso($linha['nomecurso']);
			
			__autoload("RepositorioTurma");
			__autoload("Turma");
			$turma = new Turma();
			$turma->setCurso($curso);
			$turma->setIdTurma($linha['idturma']);
			$turma->setTurma($linha['turma']);
			$turma->setDataInicio($linha['datainicio']);
			$turma->setDataFim($linha['datafim']);
			
			$cadastro[$i]->setTurma($turma);
			$cadastro[$i]->setCurso($curso);
			
			$i++;
		}
		
		return $cadastro;
		
	}
	
	public static function deletaPessoa($idPessoa){
		try{
			$sql = "DELETE FROM tpessoa WHERE idpessoa = '".$idPessoa."' LIMIT 1;";
			__autoload("Conexao");
			Conexao::executaSql($sql);
		}catch (PessoaDeletaException $delException){
			echo $delException->getMessage();
		}
		
	}
	
	private static function equalsPessoa(Pessoa $pessoa){
		$sql = "SELECT * FROM `tpessoa` WHERE `cpf` = '".$pessoa->getCpf()."';";
		
		__autoload("Conexao");
		$tab = Conexao::tabelaSql($sql);
		if(count($tab)>0){
			return true;
		}
		return false;
	}
	
	private static function idPessoa($cpf){
		$sql = "SELECT * FROM tpessoa WHERE cpf='".$cpf."';";
		__autoload("Conexao");
		$tabPessoa = Conexao::tabelaSql($sql);
		
		foreach ($tabPessoa as $pessoa){
			$idPessoa = $pessoa['idpessoa'];
		}
	
		return $idPessoa;
	}
}
?>